package com.example.demo.service;

import com.example.demo.client.evt.sysbasequery.QueryLogEvt;
import com.example.demo.client.evt.sysbasequery.QueryLogInfoEvt;
import com.example.demo.client.vm.sysbasequery.LogSelectVm;
import com.ffcs.oss.param.vm.QueryPageVm;
import com.example.demo.web.rest.evt.OperateLogEvt;
import com.example.demo.web.rest.evt.PeriodEvt;
import com.example.demo.web.rest.evt.log.*;
import com.example.demo.web.rest.vm.LoginLogVm;
import com.example.demo.web.rest.vm.MenuLogVm;
import com.example.demo.web.rest.vm.OperateLogVm;
import org.apache.poi.ss.usermodel.Workbook;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 日志管理接口(登录日志、操作日志、系统日志)
 * @Author zhengmf
 * @Date 2018/12/26  18:14
 */
public interface LogService {
    /**
     * 删除指定时间段的登录日志
     * @param evt
     * @return
     */
    Integer delLoginLogByPeriod(PeriodEvt evt);
    /**
     * 根据id删除登录日志
     * @param id
     * @return
     */
    Integer delLoginLogById(Long id);

    /**
     * 删除指定时间段的系统日志
     * @param evt
     * @return
     */
    Integer delLogByPeriod(PeriodEvt evt);

    /**
     * 根据Id删除系统日志
     * @param id
     * @return
     */
    void delLogById(Long id);

    /**
     * 保存操作日志
     * @param evt
     */
    void saveOperateLog(OperateLogEvt evt);

    /**
     * 根据id删除操作日志
     * @param id
     * @return
     */
    void delOperateLogById(Long id);

    /**
     * 查询系统日志表
     * @return
     */
    QueryPageVm<Map<String,Object>> queryLogInfo(QueryLogInfoEvt evt);

    /**
     * 定时器导出日志表
     * @return
     */
    void exportLogAuto( QueryLogEvt evt);

    /**
     * 定时器导出日志表IO流
     * @return
     */
    void exportLogAutoIO(Workbook workbook, String fileName) throws IOException;

    /**
     * 根据区域统计操作日志
     * @param evt
     * @return
     */
    List<Map<String, Object>> countByArea(QryOperateLogEvt evt);

    /**
     * 根据区域统计操作日志
     * @param evt
     * @return
     */
    List<Map<String, Object>> countByCompany(QryOperateLogEvt evt);
    /**
     * 根据用户统计操作日志
     * @param evt
     * @return
     */
    List<Map<String, Object>> countByUser(QryOperateLogEvt evt);
    /**
     * 根据用户统计操作日志
     * @param evt
     * @return
     */
    List<Map<String, Object>> countByFun(QryOperateLogEvt evt);
    /**
     * 根据忙时统计操作日志
     * @param evt
     * @return
     */
    List<Map<String, Object>> countByBusy(QryOperateLogEvt evt);

    /**
     * 根据忙时统计登录日志
     * @return
     */
    QueryPageVm<OperateLogVm> listOperateLog(QueryOperateLogEvt evt);

    /**
     * 根据忙时统计登录日志
     * @return
     */
    QueryPageVm<LoginLogVm> listLoginLog(LoginLogEvt evt);

    QueryPageVm<Map<String,Object>> queryLogInfoEs(QueryLogInfoEvt evt) throws Exception;

    List<LogSelectVm> queryLogSelect() throws Exception;

    void saveMenuLog(MenuLogEvt evt, HttpServletRequest request);

    QueryPageVm<List<MenuLogVm>> queryMenuLog(QueryMenuLogEvt evt);
}
